package com.shujia.wyh.day10;

/*
        代码块：
            在Java中，使用{}括起来的代码被称为代码块，根据其位置和声明的不同，
            可以分为局部代码块，构造代码块，静态代码块，同步代码块(多线程讲解)
        局部代码块：
            在方法中出现。使用完之后，就会释放掉，限定局部变量的生命周期，及早释放，提高内存的使用
            在同一个方法中，多个局部代码块的执行顺序是自上而下执行的。
        构造代码块：
            在类中方法外出现；在每次创建对象的时候会执行构造代码块，但是呢，我们创建对象需要使用构造方法，
            问题：构造方法与构造代码块的执行顺序是什么？在构造方法之前执行
        静态代码块：
            在类中方法外出现，并加上static修饰；
            构造方法，构造代码块，静态代码块:
                    静态代码块 -- 构造代码块 -- 构造方法
            静态代码块的作用：
                1、给类进行初始化
                2、在程序过程中只执行一次
            多个静态代码块之间，执行顺序是自上而下。无论中间有其他的代码块，静态的都会先执行。


 */
public class CodeDemo {
    private static String name;
    CodeDemo(){
        int c = 200;
        System.out.println(c);
        System.out.println(name);
    }

    //静态代码块
    //是随着类的加载而加载的，会优先于对象而存在执行
    //随着其他静态的一起加载到方法区中。
    static {
        name = "nihao";
        int d = 300;
        System.out.println(d);
    }

    //构造代码块
    {
        int b = 100;
        System.out.println(b);
    }

    static {
        name = "张三";
        int d = 400;
        System.out.println(d);
    }

    public static void main(String[] args) {
        {
            int x = 10;
            System.out.println(x);
        }
//        System.out.println(x);
        {
            int x = 20;
            System.out.println(x);
        }

        CodeDemo codeDemo = new CodeDemo();
        {
            int x = 30;
            System.out.println(x);
        }
        CodeDemo codeDemo1 = new CodeDemo();
    }
}
